package com.sjh.lib_app.statusMananger.defWidget

import android.content.Context
import android.view.View
import com.sjh.lib_app.R
import com.sjh.lib_app.statusMananger.StatusClickListener
import com.sjh.lib_app.statusMananger.StatusManager
import com.sjh.lib_app.statusMananger.StatusView

/**
 * explain : 这是组装占位页面的工具类，项目中的占位页面都从这里获取
 *
 * author : SunJH
 * data : 2020/4/2
 */

class DefPageUtils {
    companion object {
        /**
         * 获取占位图方法
         * @param context 上下文，必须传
         * @param view 需要被替换掉的内容
         * @param type 获取占位图类型，可以不传，如果不传会使用通用的
         *              type值是枚举类型，如果有新增的类型，需要在DefPageType 枚举中写新的枚举
         *              如果需要显示不同的界面，需要在该方法的区分里面写自己展示页面。
         * @param loadingView 加载中，应对特殊情况，允许传自定义的加载中StatusView,不传的情况下，使用默认的
         * @param errorView 加载出错，应对特殊情况，允许传自定义的加载中StatusView,不传的情况下，使用默认的
         * @param noData 没有数据，应对特殊情况，允许传自定义的加载中StatusView,不传的情况下，使用默认的
         * @param statusclick 空布局的界面可以点击这个就是点击事件的回调
         */
        fun getDefPage(context: Context, view: View, type: DefPageType? = DefPageType.COMMON, loadingView: StatusView? = null, errorView: StatusView? = null, noData: StatusView? = null, statusclick: ((String) -> Unit)? = null): StatusManager {
            var mLoadingView = loadingView ?: GifLoadingStatusView()
            var mErrorView = errorView ?: LoadErrorStatusView()
            var mNoData = noData ?: NoDataStatusView()
            when (type) {
                DefPageType.COMMON -> {
                    mNoData = noData ?: NoDataStatusView(
                        R.drawable.app_bg_no_data
                    )
                }
                DefPageType.SEARCH -> {
                    mNoData = noData ?: NoDataStatusView(
                        R.drawable.app_bg_no_search
                    )
                }
            }

            return StatusManager.Builder(context)
                .setContentStatus(view)
                .setLoadingStatus(mLoadingView)
                .setErrorStatus(mErrorView)
                .setEmptyStatus(mNoData)
                .setOnClick(StatusClickListener {
                    statusclick?.invoke(it)
                })
                .builder()
        }
    }

}

enum class DefPageType {
    COMMON,             //通用
    SEARCH,             //搜索

}
